package com.ctrip.demo.design.proxy.cglib;

import net.sf.cglib.proxy.*;

import java.lang.reflect.Method;

public class CglibProcy {

    public static<T> T createProxy(T t) {
        // 创建一个增强器
        Enhancer enhancer = new Enhancer();
        // 设置需要增强哪个类，增强器为这个类动态=创建一个子类
        enhancer.setSuperclass(t.getClass());
        // 设置回调
        enhancer.setCallback(new MethodInterceptor() {
            @Override
            public Object intercept(Object obj, Method method, Object[] args, MethodProxy proxy) throws Throwable {
                // 拦截目前方法执行的逻辑
                System.out.println(" 增强逻辑...");
//                Object invoke = proxy.invoke(t, args);
                Object invoke = proxy.invokeSuper(obj, args);
                return invoke;
            }
        });
        return (T) enhancer.create();
    }
}
